Repository navigation
docs(debug-journal): fold in the 2026-09-26 queue slice (15 candidates); correct entries overtaken by the #5109/#5173/#5185/#5188/#5189 merge batch - #5240
Merged
Conversation
Resolve debug-journal conflicts with #5223's fold of the same merge batch: - Solis: keep this PR's #5189 detail and write-skip/test notes, then main's GH#5152 window-scoped hold lever - GE Cloud: main's #5109 wording plus the once-per-episode ems_slot_warned warning and its log text - Teslemetry: this PR's #5188 default-flip consequences plus main's GH#5157 forced re-assert - Manual rates: fold both rows into one (#5173 fix, surviving :59:59 boundary-minute and offset traps, test lesson) - Kraken, Sunsynk, Octopus, Car charging from main; Axle, GivTCP, Compare and the three new rows from this PR Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated journal flush — the daily
/journal-updaterun folding the triage bot's queued findings intotools/debug-journal.md. Branch pushed by the bot; a human merge is the review gate. 15 candidates processed (the first 15 in filename sort order); 26 remain queued for the next slice.Per-candidate outcomes
GH#2716 (car charged at peak) — Folded in as a new symptom-table row: non-smart car planning is price-blind by design (
car_charging_plan_smartdefault false,car_charging_plan_max_pricedefault 0 never filters), a saving-session reward stamped onto the import rate can push an hour above the low-rate scan threshold so it vanishes fromlow_rates, and the in-progress peak-window house top-up is the optimiser's keep response. Line refs re-verified on main (plan.py:3935/:3968— the high-price gate exempts windows whose limit is already non-zero).GH#5169 (two test-harness corrections) — Partially folded in. Its part 1 ("all tests share one fixture" is out of date) is already in the journal — PR #5102's per-test instance fix landed before this candidate was written — so that half is dropped as duplicate. Folded in: pollution through module-level/class-level state can still cross the per-test instances (
test_secrets.py's race test; the class-attribute lock onLogRedaction), a test that raises aborts the whole run (baretest_failed = func(my_predbat), verified live atunit_test.py:940), and thecoverage/run_pre_commit&&short-circuit (markdownlint failure ⇒ the quick suite silently never runs).GH#5171 (id()-reuse test trap) — Folded in as a new trap bullet: allocator probes pass against the unfixed
id()-fingerprint code; the deterministic test asserts the mapping is pinned viagc.get_referrers()(dicts not weakref-able). The fingerprint fix itself is merged (7d17ea1b).GH#5173 (manual rates) — Folded in as a new "Manual rates" row, rewritten for the merge: PR #5173 merged 2026-09-24 —
day_of_weekrules now stamp across the whole horizon; keep the mechanism for pre-#5173 logs; on current builds a fully-tiled manual tariff is neverrate_replicate()d, so "the offset stopped applying" on a manual tariff is that consequence, not a bug. The:59:59zero-minute boundary trap verified still live (fetch.py:2144pre-init) and kept as live.GH#5175 (Axle import boost) — Folded in to the existing Axle row: PR #4520 provenance (first release v8.48.2), docs/energy-rates.md cite, maintainer upheld the design on #5060, #5175 triaged as enhancement, no config knob disables just the import side, and the colour-skew half belongs to the #5050 threshold row.
GH#5176 (manual load adjust) — Folded in as a new "Manual load adjust" row. Since the candidate was written, the docs disagreement it flagged was fixed by the maintainer (
c06bff91, 2026-09-23 — docs now say "add the adjustment amount (which can be positive or negative)"); the entry records that, plus the additive mechanism, the plan-HTML±-marker triage method, and theload_today_comparisoncitation (confirmed registered inTEST_REGISTRY).GH#5177 (Solis startup abort) — Folded in as fixed. The journal already recorded PR #5185's merge; folded the surviving refinements into the Solis row (pre-#5185 signature, B0115 raised through the same unguarded call), moved the generic
first-stays-True / blank-health-message framework trap to the Component health row (with the backoff corrected to the code's 60s→128min — the candidate's "from 2 min" was wrong), and kept the test_solis.py tricks (instance-attribute mock restore, cannedapi.session, never patchasyncio.sleepbecause_with_retrybudgets withtime.monotonic()).GH#5178 (GivTCP REST publish) — Folded in: full-surface unconditional publish (count arithmetic, recorder-exclusion workaround, missing docs section) plus the
discharge_target_socclaim/publish mismatch (rest_v3-only claim gate vs unsupported-model publish withholding) — both verified live on main. The log-dating trap went to the Version drift trap bullet.GH#5180 (compare Existing badge) — Folded in to the Compare row: baseline snapshot from the live rate tables vs the refetched plain card, in-tree fix baselines (
rate_import_no_io/rate_export_base), test gap, and the finally-block gap kept marked suspected (as in the candidate).GH#5181 (is_running unhealthy) — Folded in as a new "Status health" row — still live on main, re-verified today (
output.py:2699strftime%zwriter,predbat.py:1960strictfromisoformatreader).GH#5182 (
{power}gets inverter max) — Folded in to the low-power symptom row as the write-path variant: dup of #3311, PR #4645 still unmerged (no merge commit in origin/main), chain re-verified live (inverter.py:630/:1952).GH#5186 (teslemetry_automatic scoping + tbc default) — Folded in, and the existing Teslemetry row corrected: PR #5188 merged, so
teslemetry_tbc_controlis now default-on (DEFAULT_TBC_CONTROL = True); rewrote the stale "trial setting" passage and added the scoping fact thatteslemetry_automaticgates onlyautomatic_config(), not the scheduler-emulator writes.GH#5187 (Solis slot current + recovery SoC) — Rewritten as fixed: PR #5189 merged — slot currents capped at the inverter's rated power and implausible recovery SoC (0/1/≤over-discharge/>100) now falls back to
over_discharge_soc + 1(both verified in solis.py); kept the mechanism for pre-#5189 logs. The never-read-slot-CID write-skip trap verified still live and kept as live, with the fixture trap note.GH#5188 (bool-default narrowing) — Folded in: the first get_arg bool-trap bullet now records that component registry args are protected (a YAML null resolves to the registry default in
Components.initialize(), verifiedcomponents.py:806-811) while the trap survives for directget_arg()callers; also recorded why the global fix (a None arm in get_arg's bool branch) was deliberately left as a follow-up.Existing entries corrected (merge-driven)
SETTINGS_SLOW_REFRESH_SECONDS) plus a once-per-device slot-1 override warning. Kept the pre-fix(gecloud): re-read EMS battery inverter settings and warn on a slot 1 override #5109 signature for older logs.Verification notes
f0dc5bc4before folding in. "Fixed on main" claims verified by reading the merged code: the Solis startup guard, the rated-current cap and recovery-SoC fallback,Components.initialize()'s YAML-null normalisation,DEFAULT_TBC_CONTROL, the fingerprint-holding log_secrets fix, and Honour day_of_week when seeding rates beyond the modelled days (#5168) #5173's whole-horizon stamping (2139b063).component_base.pystarts at 60 s), and GH#5176's docs disagreement is moot post-c06bff91.:59:59zero-minute pre-init (fetch.py:2144), the never-read-slot-CID write-skip (solis.py),compare.py:598baseline,output.py:2699/predbat.py:1960, theinverter.py:630/:1952{power}chain, and the bareunit_test.py:940test call.fromisoformat,weakref). The quick suite then aborted at the documented near-midnight teslemetry clock test (test_teslemetry_local_weekday_follows_the_base_clock, host-UTC date disagreement at 00:09 local) — pre-existing and recorded in the journal's test-date trap, unrelated to this docs-only change.detect_changesvs origin/main: 2 files, docs sections only, 0 affected processes, risk low.